The software development processes, including such activities as compiling source code are very familiar to developers and in some ways, have not changed substantially over the last few decades. However, in this same period, computational resources including CPU, memory, network bandwidth, etc. that are available for compilation have increased dramatically, for instance.
As the scale of software development increases and the capabilities of the computational resources improve, in particular the capability to collaborate via network of computers, the view that software development is a desktop-based client-centric activity is being challenged. As large teams need to coordinate activities related to software development, increasingly important parts of the software development process have shifted to a client-server network environment to enable the use of a network of computational resources to process, unify, and coordinate the activities of multiple teams. This need to unify and coordinate software development activities exists even on a stand alone desktop machine. For instance, a developer may use the same desktop machine for software development activities related to the same code but as different projects at different times.
Current solutions that focus on a typical integrated development environment (IDE) (e.g., Visual Studio®, Rational®, etc.) provide limited direct support for unifying and coordinating the various software development activities. As a result, much of the software development work is implemented in an ad hoc manner with each team recreating its own process, and tools, which can lead to numerous mistakes.
A number of problems exist with the current approach to software development. For instance, each time a source file of a software program is processed (e.g., compiled, optimized, analyzed, etc.) during the software development process, it is viewed in isolation. For instance, current compilers do not attempt to understand the relationship between source files compiled today and those compiled yesterday. Likewise, they do not attempt to reason about identical source files submitted during different build processes. As a result, much of the software development activity today is related to wasted re-computation of results that may have been previously processed.
Thus, there is a need for an improved software development model, wherein software development activities, such as compiling, analyzing, and building software can be implemented intelligently by retaining, discovering and re-using results of previous processing. More specifically, there is a need for delivering software development services while avoiding re-computation of previously computed results for service requests and avoiding unnecessary transmission of data over a network, for instance.